package vanillajdk8.algos;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;

public class NodoArbol {

    private char elemento;
    private List<NodoArbol> hijos;

    public NodoArbol(char elemento) {
        this.elemento = elemento;
        this.hijos = new ArrayList<>();
    }

    public char getElemento() {
        return elemento;
    }

    public List<NodoArbol> getHijos() {
        return hijos;
    }

    public void addHijo(NodoArbol nodoArbol) {
        this.hijos.add(nodoArbol);
    }

    public boolean esNodoHijo() {
        return !hijos.isEmpty();
    }

    public boolean doBFS_pre8(char c) {
        Queue<NodoArbol> cola = new LinkedList<>();
        cola.add(this);//punto de partida (nodo raiz)
        while (!cola.isEmpty()) {
            NodoArbol cabeza = cola.poll();//saca el primer elemento de la cola y lo remueve (.head scala)
            System.out.println(cabeza.getElemento());
            if (cabeza.getElemento() == c) {
                return true; // elemento encontrado
            } else {
                for (NodoArbol hijo : cabeza.getHijos()) {
                    cola.add(hijo);//añado los hijos a la cola
                }
            }
        }
        return false;//no encontro elemento
    }

    public boolean doBFS(char c) {
        Queue<NodoArbol> cola = new LinkedList<>();
        cola.add(this);
        while (!cola.isEmpty()) {
            NodoArbol cabeza = cola.poll();
            System.out.println(cabeza.getElemento());
            if (cabeza.getElemento() == c) {
                return true;
            }
            cabeza.getHijos().forEach(hijo -> cola.add(hijo));
        }
        return false;
    }

}
